home *** CD-ROM | disk | FTP | other *** search
- /*
- ** CONFTP.C
- **
- ** Console mode CONFTP client.
- */
-
- #include <windows.h>
- #include <winsock.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include "fce.h"
-
- /* globals */
-
- #define BS 8
- #define LF 10
- #define CR 13
- #define ESC 27
- #define TAB 9
-
- #define MAX_STR 128
- #define MAX_BUF 2048
-
- static char Temp[MAX_STR];
- static char CmdBuffer[MAX_STR];
- static char ServerDir[MAX_STR];
- static char LocalDir[MAX_STR];
- static char DataBuffer[MAX_BUF];
-
- void Help(void)
- {printf("Commands are:\n");
- printf(" HELP : Get help\n");
- printf(" QUIT : Quit program\n");
- printf(" ASCII : Set ASCII mode\n");
- printf(" BINARY : Set BINARY mode\n");
- printf(" LIST : List all files\n");
- printf(" NLIST : List file names only (NLST)\n");
- printf(" SSD : Set server directory (CWD)\n");
- printf(" DSD : Display server directory (PWD)\n");
- printf(" SLD : Set local directory\n");
- printf(" DLD : Display local directory\n");
- printf(" GET xxx : Get file xxx\n");
- printf(" PUT xxx : Put file xxx\n");
- printf(" DEL xxx : Delete file xxx\n");
- printf(" FLIST n : Display fields for file # n (n>=1)\n");
- }
-
- void ShowError(int Code)
- {Temp[0] = '\0';
- fceErrorText(0,Code,(LPSTR)Temp,MAX_STR);
- printf("ERROR %d: %s\n", Code, Temp);
- }
-
- void ErrorExit(int Code)
- {ShowError(Code);
- fceRelease();
- exit(1);
- }
-
- /*
- ** CallTheDriver calls fceDriver in a loop until it returns 0,
- ** indicating that it is done. Refer to the FCE Users Manual
- ** (FCE4C_U.TXT) for details on using fceDriver.
- */
-
- ULONG CallTheDriver(char Direction)
- {int Code;
- ULONG ByteCount;
- ULONG LastCount = 0;
- ULONG TheTime;
- fceSetString(0,FCE_WRITE_TO_LOG,(LPSTR)"--> Entering CallTheDriver");
- /* get start time */
- TheTime = GetCurrentTime();
- /* AUTO_CALL_DRIVER assumed on (1) */
- while(1)
- {Code = fceDriver(0);
- if(Code<0) ShowError(Code);
- if(Code<=0) break;
- /* display progress */
- if(Direction=='G') ByteCount = fceGetInteger(0, FCE_GET_FILE_BYTES_RCVD);
- if(Direction=='P') ByteCount = fceGetInteger(0, FCE_GET_FILE_BYTES_SENT);
- if(ByteCount!=LastCount)
- {printf("%d bytes\r",ByteCount);
- LastCount = ByteCount;
- }
- }
- /* compute run time */
- TheTime = GetCurrentTime() - TheTime;
- /* re-enable automatic call to seeDriver */
- fceSetInteger(0,FCE_SET_AUTO_CALL_DRIVER,1);
- fceSetString(0,FCE_WRITE_TO_LOG,(LPSTR)"--> Leaving CallTheDriver");
- return TheTime;
- }
-
- void main(int argc, char *argv[])
- {int i, n, Code;
- LPSTR ServerPtr;
- LPSTR UserPtr;
- LPSTR PassPtr;
- ULONG ByteCount;
- ULONG TheTime;
- int BufLen;
- int Version;
- int Build;
- /* check arguments */
- if(argc!=4)
- {printf("Usage: CONFTP server user password \n");
- printf(" Eg: CONFTP ftp.marshallsoft.com anonymous you@yourisp.com\n");
- Help();
- exit(1);
- }
-
- ServerPtr = (LPSTR) argv[1];
- UserPtr = (LPSTR) argv[2];
- PassPtr = (LPSTR) argv[3];
- strcpy(ServerDir,".\\");
-
- Code = fceAttach(1);
- if(Code<0) ErrorExit(Code);
- Version = fceGetInteger(0,FCE_GET_VERSION);
- Build = fceGetInteger(0,FCE_GET_BUILD);
- printf("FCE32 Version: %1d.%1d.%1d Build %d\n",
- 0x0f&(Version>>8),0x0f&(Version>>4),0x0f&Version,Build);
- fceGetString(0,FCE_GET_REGISTRATION,(LPSTR)Temp,50);
- printf(" Registration: %s\n", Temp);
- Code = fceSetString(0,FCE_SET_LOG_FILE,(LPSTR)"conftp.log");
-
- printf("Connecting...\n");
-
- Code = fceConnect(0,ServerPtr,UserPtr,PassPtr);
- if(Code<0) ErrorExit(Code);
-
- printf("Connected\n");
- /* ready for user commands */
- while(1)
- {printf(">");
- n = scanf("%s",CmdBuffer);
- ///printf("%d[%s]\n", n, CmdBuffer);
- /* force command to upper case */
- BufLen = (int)strlen(CmdBuffer);
- for(i=0;i<BufLen;i++) CmdBuffer[i] = toupper(CmdBuffer[i]);
-
- if(strcmp(CmdBuffer,"QUIT")==0)
- {/* QUIT */
- fceClose(0);
- fceRelease();
- break;
- }
-
- if( (strcmp(CmdBuffer,"SSD")==0)||
- (strcmp(CmdBuffer,"CWD")==0))
- {n = scanf("%s",ServerDir);
- Code = fceSetServerDir(0, (LPSTR)ServerDir);
- if(Code<0) ShowError(Code);
- continue;
- }
-
- if( (strcmp(CmdBuffer,"DSD")==0)||
- (strcmp(CmdBuffer,"PWD")==0))
- {Code = fceGetServerDir(0, (LPSTR)ServerDir, MAX_STR);
- if(Code<0) ShowError(Code);
- else printf("%s\n", ServerDir);
- continue;
- }
-
- if(strcmp(CmdBuffer,"SLD")==0)
- {n = scanf("%s", LocalDir);
- Code = fceSetLocalDir(0, (LPSTR)LocalDir);
- if(Code<0) ShowError(Code);
- continue;
- }
-
- if(strcmp(CmdBuffer,"DLD")==0)
- {Code = fceGetLocalDir(0, (LPSTR)LocalDir, MAX_STR);
- if(Code<0) ShowError(Code);
- else printf("%s\n", LocalDir);
- continue;
- }
-
- if(strcmp(CmdBuffer,"ASCII")==0)
- {Code = fceSetMode(0,'A');
- if(Code<0) ShowError(Code);
- continue;
- }
-
- if(strcmp(CmdBuffer,"BINARY")==0)
- {Code = fceSetMode(0,'B');
- if(Code<0) ShowError(Code);
- continue;
- }
-
- if(strcmp(CmdBuffer,"LIST")==0)
- {DataBuffer[0] = '\0';
- Code = fceGetList(0,FCE_FULL_LIST,(LPSTR)DataBuffer,MAX_BUF);
- if(Code<0) ShowError(Code);
- else printf("%s\n", DataBuffer);
- continue;
- }
-
- if((strcmp(CmdBuffer,"NLIST")==0)||
- (strcmp(CmdBuffer,"NLST")==0))
- {DataBuffer[0] = '\0';
- Code = fceGetList(0,FCE_NAME_LIST,(LPSTR)DataBuffer,MAX_BUF);
- //n = strlen(DataBuffer);
- if(Code<0) ShowError(Code);
- else printf("%s\n", DataBuffer);
- continue;
- }
-
- if(strcmp(CmdBuffer,"HELP")==0)
- {Help();
- continue;
- }
-
- if(strcmp(CmdBuffer,"GET")==0)
- {n = scanf("%s",DataBuffer);
- printf("Getting '%s'\n", DataBuffer);
- /* disable automatic call to fceDriver */
- fceSetInteger(0,FCE_SET_AUTO_CALL_DRIVER,0);
- /* ask for the file */
- Code = fceGetFile(0,(LPSTR)DataBuffer);
- if(Code<0) ErrorExit(Code);
- TheTime = CallTheDriver('G');
- /* display final count */
- ByteCount = fceGetInteger(0, FCE_GET_FILE_BYTES_RCVD);
- printf("%d bytes received in %0.2f seconds\n",ByteCount,(float)TheTime/1000.0);
- continue;
- }
-
- if(strcmp(CmdBuffer,"PUT")==0)
- {n = scanf("%s",DataBuffer);
- printf("Putting '%s'\n", DataBuffer);
- /* disable automatic call to fceDriver */
- fceSetInteger(0,FCE_SET_AUTO_CALL_DRIVER,0);
- Code = fcePutFile(0,(LPSTR)DataBuffer);
- if(Code<0) ErrorExit(Code);
- TheTime = CallTheDriver('P');
- /* display final count */
- ByteCount = fceGetInteger(0, FCE_GET_FILE_BYTES_SENT);
- printf("%d bytes sent in %0.2f seconds\n",ByteCount,(float)TheTime/1000.0);
- continue;
- }
-
- if(strcmp(CmdBuffer,"DEL")==0)
- {n = scanf("%s",DataBuffer);
- printf("Deleting '%s'\n", DataBuffer);
- Code = fceDelFile(0,(LPSTR)DataBuffer);
- if(Code<0) ShowError(Code);
- continue;
- }
-
- if(strcmp(CmdBuffer,"FLIST")==0)
- {int Total = 0;
- char LineBuf[100];
- DataBuffer[0] = '\0';
- scanf("%s",DataBuffer);
- n = atoi(DataBuffer);
- if(n<=0)
- {printf("ERROR: No such line %d\n",n);
- continue;
- }
- /* ask for full list */
- DataBuffer[0] = '\0';
- Code = fceGetList(0,FCE_FULL_LIST,(LPSTR)DataBuffer,MAX_BUF);
- if(Code<0) ShowError(Code);
- /* get each field of line n */
- for(i=1;i<=9;i++)
- {Code = fceExtract((LPSTR)DataBuffer, n, i, (LPSTR)LineBuf, 100);
- Total += Code;
- if(Code>0) printf("LINE %d, FIELD %d: Len %2d [%s] \n", n, i, Code, LineBuf);
- }
- if(Total==0) printf("ERROR: No data\n");
- continue;
- }
-
- /* don't recognize commands */
- printf("Cannot recognize command %s\n", CmdBuffer);
- printf("Type HELP for help\n");
- }
- }
-
-